
// Muestra un mensaje que indica que un objeto se esta cargando.
function msjLoading(id, mostrar)
	{
	if(mostrar)
		{
		var x = jQuery("#"+id).offset().left;
		var y = jQuery("#"+id).offset().top;
		var w = jQuery("#"+id).width();
		var h = jQuery("#"+id).height();
		jQuery("#"+id).after('<div id="'+id+'_loadingMessage" style="position:absolute; width:'+w+'px; height:'+h+'px; top:'+y+'px; left:'+x+'px; border:1px solid gray; text-align:center; background-color:white; "><img style="position:relative; top:'+(h/2-22)+'px;" src="img/loading.gif" alt="Cargando" title="Cargando"/></div>');
		}
	else
		{jQuery("#"+id+"_loadingMessage").remove();}
	}

// Muestra un mensaje emergente
function mostrarMsj(titulo, mensaje)
	{
	var id = "dialog-msj-" + timestamp();
	var cuadro = '<div id="'+id+'" title="' + titulo + '" >' + mensaje + '</div>';
	jQuery("body").append(cuadro);

	jQuery("#" + id).dialog(
		{
        autoOpen: true,
		show: 'slide',
		hide: 'slide',
        modal: true
		});
	}

// Agrega los puntos de separacion de miles a un numero.
function formatoNumero(numero)
	{
	var num = numero.toString();

	var enteros = '';
	var decimales = '';

	var pos = num.indexOf('.');
	if(pos >= 0 && num.length >= pos+1)
		{
		num = num.replace('.', ',');
		enteros = num.substr(0, pos);
		decimales = num.substr(pos+1);
		}
	else
		{enteros = num;}

	num = '';
	while(enteros.length > 3)
		{
		num = num + '.' + enteros.substring(enteros.length - 3, enteros.length);
                enteros = enteros.substr(0, enteros.length - 3);
		}
	num = enteros + num;

	if(decimales != '') {num = num + ',' + decimales;}

	return num;
	}

function formatoNumerMillon(numero)
	{
	var num = numero.toString();

	var enteros = '';
	var decimales = '';

	var pos = num.indexOf('.');
	if(pos >= 0 && num.length >= pos+1)
		{
		num = num.replace('.', ',');
		enteros = num.substr(0, pos);
		decimales = num.substr(pos+1);
		}
	else
		{enteros = num;}

	num = '';
	while(enteros.length > 3)
		{
                if (enteros.length == 7) {
                    num = num + '.' + enteros.substring(enteros.length - 3, enteros.length);
                    enteros = enteros.substr(0, enteros.length - 3);
                 }else{
                    num = enteros.substring(0,1) + "." + enteros.substring(enteros.length - 3, enteros.length) + num;
                    enteros = enteros.substr(0, enteros.length - 1);
                 }
		}
	if(decimales != '') {num = num + ',' + decimales;}

	return num;
	}

// Deshabilita o habilita todos los botones de una pagina
function habilitarBotones(habilitar)
	{
	if(habilitar)
		{
		jQuery("button").removeAttr("disabled");
		jQuery("input[type='submit']").removeAttr("disabled");
		}
	else
		{
		jQuery("button").attr('disabled','disabled');
		jQuery("input[type='submit']").attr('disabled','disabled');
		}
	}

// Internet Explorer tiene el problema de que cachea las paginas obtenidas por AJAX mediante GET.
// Esto se puede evitar, en jQuery, pasando a la funcion ajax() los parámetros 'type: "POST"' y 'cache: false';.
// Para evitar que siempre traiga la misma pagina, se debe agregar, a la llamada de AJAX, un parametro que siempre sea diferente.
function timestamp()
	{
	var day = new Date();
	return day.getMilliseconds();
	}

// Devuelve un objeto Date si la fecha esta en formato dd/mm/yyyy y 'null' en caso contrario.
function convertirFecha(fecha)
  {
  if(fecha == null || fecha.length == 0) {return null;}

  var pos1 = fecha.indexOf("/");
  var pos2 = fecha.lastIndexOf("/");
  if(pos1 < 0 || pos2 < 0 || pos1 == pos2) {return null;}

  var dia = new String( fecha.substring( 0, pos1));
  var mes = new String( fecha.substring( pos1 + 1 , pos2));
  var anio = new String( fecha.substring( pos2 + 1, fecha.length));

  if(isNaN(anio) || anio.length == 0) {return null;}
  if(isNaN(mes) || mes.length == 0 || parseInt(mes, 10) < 1 || parseInt(mes, 10) > 12) {return null;}
  if(isNaN(dia) || dia.length == 0 || parseInt(dia, 10) < 1 || parseInt(dia, 10) > 31) {return null;}

  var diasXmes = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  var esBisiesto = (anio % 400 == 0) || (anio % 4 == 0 && anio % 100 != 0)
  if( esBisiesto ) diasXmes[1] = 29;

  if(parseInt(dia, 10) > diasXmes[parseInt(mes, 10) - 1]) {return null;}

  // Por alguna razon, los meses van de 0 a 11 (no pasando asi con los dias)
  return new Date(anio, mes-1, dia);
  }

// Devuelve un objeto Date si la fecha esta en formato dd/mm/yyyy hh:mm:ss y 'null' en caso contrario.
function convertirFechaHora(fechaHora)
  {
  if(fechaHora == null || fechaHora.length == 0) {return null;}

  var fecha = fechaHora.split(' ')[0];
  var horario = fechaHora.split(' ')[1];

  var pos1 = horario.indexOf(":");
  var pos2 = horario.lastIndexOf(":");
  if(pos1 < 0 || pos2 < 0 || pos1 == pos2) {return null;}

  var hora = new String( horario.substring( 0, pos1));
  var minuto = new String( horario.substring( pos1 + 1 , pos2));
  var segundo = new String( horario.substring( pos2 + 1, horario.length));

  if(isNaN(hora) || hora.length == 0 || parseInt(hora, 10) < 0 || parseInt(hora, 10) > 23) {return null;}
  if(isNaN(minuto) || minuto.length == 0 || parseInt(minuto, 10) < 0 || parseInt(minuto, 10) > 59) {return null;}
  if(isNaN(segundo) || segundo.length == 0 || parseInt(segundo, 10) < 0 || parseInt(segundo, 10) > 59) {return null;}

  // Armo el resultado
  var date = convertirFecha(fecha);
  return new Date(date.getFullYear(), date.getMonth(), date.getDate(), hora, minuto, segundo);
  }

// Verifica si la fecha es una fecha valida y si esta en formato dd/mm/yyyy.
function validarFecha(fecha)
  {return convertirFecha(fecha) != null;}

// Da a un String el formato hh:mm.
function darFormatoDeHora(hora)
	{ 
	if(hora == null || hora.length == 0) return "";

	var cifras = _getCharsGroupFromString(hora, "0123456789", 2);
	if(cifras[0].length == 0 && cifras[0].length == 0) return "";

	var HH = parseInt(cifras[0], 10);
	if( isNaN(HH) || HH < 0 || HH > 23 || cifras[0].length == 0)
		{cifras[0] = "00";}
		else
		{if(HH < 10) cifras[0] = "0" + HH;}

	var MM = parseInt(cifras[1], 10);
	if( isNaN(MM) || MM < 0 || MM > 59 || cifras[1].length == 0)
		{cifras[1] = "00";}
		else
		{if(MM < 10) cifras[1] = "0" + MM;}

	return cifras[0] + ":" + cifras[1];
	}

function _getCharsGroupFromString( cad, searchedChars, m )
	{
	var i, array = new Array(m);
	for(i=0; i<m; i++) array[i] = "";

	var j = 0;
	var prev = false;
	var first = true;

	for(i=0; i<cad.length; i++)
		{
		var c = cad.substring(i, i+1);
		if( searchedChars.indexOf(c) >= 0 )
			{
			if(!prev && !first) j++;
			if(j < m) array[j] = array[j] + c;
			prev = true;
			first = false;
			}
		else
			{prev = false;}
		}

	return array;
	}

// Comportamiento para que dos campos fechas mantenga una relacion de menor a mayor.
function changeCampoFecha(selector1, selector2, cambio)
	{
	var auxFecha1 = jQuery(selector1).val();
	var auxFecha2 = jQuery(selector2).val();
	
	if(auxFecha1 != null && auxFecha1 != '' && auxFecha2 != null && auxFecha2 != '')
		{
		var fecha1 = convertirFecha( auxFecha1 );
		var fecha2 = convertirFecha( auxFecha2 );

		if(cambio == 1 && fecha1 != null && (fecha2 == null || fecha1 > fecha2))
			{jQuery(selector2).val( jQuery(selector1).val() );}

		if(cambio == 2 && fecha2 != null && (fecha1 == null || fecha1 > fecha2))
			{jQuery(selector1).val( jQuery(selector2).val() );}
		}
	}

function getNewlongDescription(newlongId)
	{return "Newlong " + newlongId;}

function getUtecoDescription(utecoId)
	{return "Uteco " + utecoId;}
